home *** CD-ROM | disk | FTP | other *** search
/ AmigActive 2 / AACD 2.iso / AACD / Programming / fpc / amigaunits / layers.pas < prev    next >
Pascal/Delphi Source File  |  1998-09-22  |  13KB  |  532 lines

  1. {
  2.     This file is part of the Free Pascal run time library.
  3.  
  4.     A file in Amiga system run time library.
  5.     Copyright (c) 1998 by Nils Sjoholm
  6.     member of the Amiga RTL development team.
  7.  
  8.     See the file COPYING.FPC, included in this distribution,
  9.     for details about the copyright.
  10.  
  11.     This program is distributed in the hope that it will be useful,
  12.     but WITHOUT ANY WARRANTY; without even the implied warranty of
  13.     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
  14.  
  15.  **********************************************************************}
  16.  
  17. UNIT layers;
  18.  
  19. INTERFACE
  20. USES exec, graphics, utility;
  21.  
  22. const
  23.  
  24.     LAYERSIMPLE         = 1;
  25.     LAYERSMART          = 2;
  26.     LAYERSUPER          = 4;
  27.     LAYERUPDATING       = $10;
  28.     LAYERBACKDROP       = $40;
  29.     LAYERREFRESH        = $80;
  30.     LAYER_CLIPRECTS_LOST = $100;        { during BeginUpdate }
  31.                                         { or during layerop }
  32.                                         { this happens if out of memory }
  33.     LMN_REGION          = -1;
  34.  
  35. type
  36.  pLayer_Info = ^tLayer_Info;
  37.  tLayer_Info = record
  38.     top_layer           : pLayer;
  39.     check_lp            : pLayer;              { !! Private !! }
  40.     obs                 : pClipRect;
  41.     FreeClipRects       : pClipRect;              { !! Private !! }
  42.     PrivateReserve1,                            { !! Private !! }
  43.     PrivateReserve2     : Longint;              { !! Private !! }
  44.     Lock                : tSignalSemaphore;      { !! Private !! }
  45.     gs_Head             : tMinList;              { !! Private !! }
  46.     PrivateReserve3     : Integer;                 { !! Private !! }
  47.     PrivateReserve4     : Pointer;              { !! Private !! }
  48.     Flags               : WORD;
  49.     fatten_count        : Shortint;                 { !! Private !! }
  50.     LockLayersCount     : Shortint;                 { !! Private !! }
  51.     PrivateReserve5     : Integer;                 { !! Private !! }
  52.     BlankHook,                                  { !! Private !! }
  53.     LayerInfo_extra     : Pointer;              { !! Private !! }
  54.  end;
  55.  
  56. const
  57.     NEWLAYERINFO_CALLED = 1;
  58.  
  59. {
  60.  * LAYERS_NOBACKFILL is the value needed to get no backfill hook
  61.  * LAYERS_BACKFILL is the value needed to get the default backfill hook
  62.  }
  63.  LAYERS_NOBACKFILL      = 1;
  64.  LAYERS_BACKFILL        = 0;
  65.  
  66. VAR LayersBase : pLibrary;
  67.  
  68. FUNCTION BeginUpdate(l : pLayer) : LONGINT;
  69. FUNCTION BehindLayer(dummy : LONGINT; layer : pLayer) : LONGINT;
  70. FUNCTION CreateBehindHookLayer(li : pLayer_Info; bm : pBitMap; x0 : LONGINT; y0 : LONGINT; x1 : LONGINT; y1 : LONGINT; flags : LONGINT; hook : pHook; bm2 : pBitMap) : pLayer;
  71. FUNCTION CreateBehindLayer(li : pLayer_Info; bm : pBitMap; x0 : LONGINT; y0 : LONGINT; x1 : LONGINT; y1 : LONGINT; flags : LONGINT; bm2 : pBitMap) : pLayer;
  72. FUNCTION CreateUpfrontHookLayer(li : pLayer_Info; bm : pBitMap; x0 : LONGINT; y0 : LONGINT; x1 : LONGINT; y1 : LONGINT; flags : LONGINT; hook : pHook; bm2 : pBitMap) : pLayer;
  73. FUNCTION CreateUpfrontLayer(li : pLayer_Info; bm : pBitMap; x0 : LONGINT; y0 : LONGINT; x1 : LONGINT; y1 : LONGINT; flags : LONGINT; bm2 : pBitMap) : pLayer;
  74. FUNCTION DeleteLayer(dummy : LONGINT; layer : pLayer) : LONGINT;
  75. PROCEDURE DisposeLayerInfo(li : pLayer_Info);
  76. PROCEDURE DoHookClipRects(hook : pHook; rport : pRastPort; rect : pRectangle);
  77. PROCEDURE EndUpdate(layer : pLayer; flag : ULONG);
  78. FUNCTION FattenLayerInfo(li : pLayer_Info) : LONGINT;
  79. PROCEDURE InitLayers(li : pLayer_Info);
  80. FUNCTION InstallClipRegion(layer : pLayer; region : pRegion) : pRegion;
  81. FUNCTION InstallLayerHook(layer : pLayer; hook : pHook) : pHook;
  82. FUNCTION InstallLayerInfoHook(li : pLayer_Info; hook : pHook) : pHook;
  83. PROCEDURE LockLayer(dummy : LONGINT; layer : pLayer);
  84. PROCEDURE LockLayerInfo(li : pLayer_Info);
  85. PROCEDURE LockLayers(li : pLayer_Info);
  86. FUNCTION MoveLayer(dummy : LONGINT; layer : pLayer; dx : LONGINT; dy : LONGINT) : LONGINT;
  87. FUNCTION MoveLayerInFrontOf(layer_to_move : pLayer; other_layer : pLayer) : LONGINT;
  88. FUNCTION MoveSizeLayer(layer : pLayer; dx : LONGINT; dy : LONGINT; dw : LONGINT; dh : LONGINT) : LONGINT;
  89. FUNCTION NewLayerInfo : pLayer_Info;
  90. PROCEDURE ScrollLayer(dummy : LONGINT; layer : pLayer; dx : LONGINT; dy : LONGINT);
  91. FUNCTION SizeLayer(dummy : LONGINT; layer : pLayer; dx : LONGINT; dy : LONGINT) : LONGINT;
  92. PROCEDURE SortLayerCR(layer : pLayer; dx : LONGINT; dy : LONGINT);
  93. PROCEDURE SwapBitsRastPortClipRect(rp : pRastPort; cr : pClipRect);
  94. PROCEDURE ThinLayerInfo(li : pLayer_Info);
  95. PROCEDURE UnlockLayer(layer : pLayer);
  96. PROCEDURE UnlockLayerInfo(li : pLayer_Info);
  97. PROCEDURE UnlockLayers(li : pLayer_Info);
  98. FUNCTION UpfrontLayer(dummy : LONGINT; layer : pLayer) : LONGINT;
  99. FUNCTION WhichLayer(li : pLayer_Info; x : LONGINT; y : LONGINT) : pLayer;
  100.  
  101. IMPLEMENTATION
  102.  
  103. FUNCTION BeginUpdate(l : pLayer) : LONGINT;
  104. BEGIN
  105.   ASM
  106.     MOVE.L  A6,-(A7)
  107.     MOVEA.L l,A0
  108.     MOVEA.L LayersBase,A6
  109.     JSR -078(A6)
  110.     MOVEA.L (A7)+,A6
  111.     MOVE.L  D0,@RESULT
  112.   END;
  113. END;
  114.  
  115. FUNCTION BehindLayer(dummy : LONGINT; layer : pLayer) : LONGINT;
  116. BEGIN
  117.   ASM
  118.     MOVE.L  A6,-(A7)
  119.     MOVEA.L dummy,A0
  120.     MOVEA.L layer,A1
  121.     MOVEA.L LayersBase,A6
  122.     JSR -054(A6)
  123.     MOVEA.L (A7)+,A6
  124.     MOVE.L  D0,@RESULT
  125.   END;
  126. END;
  127.  
  128. FUNCTION CreateBehindHookLayer(li : pLayer_Info; bm : pBitMap; x0 : LONGINT; y0 : LONGINT; x1 : LONGINT; y1 : LONGINT; flags : LONGINT; hook : pHook; bm2 : pBitMap) : pLayer;
  129. BEGIN
  130.   ASM
  131.     MOVE.L  A6,-(A7)
  132.     MOVEA.L li,A0
  133.     MOVEA.L bm,A1
  134.     MOVE.L  x0,D0
  135.     MOVE.L  y0,D1
  136.     MOVE.L  x1,D2
  137.     MOVE.L  y1,D3
  138.     MOVE.L  flags,D4
  139.     MOVEA.L hook,A3
  140.     MOVEA.L bm2,A2
  141.     MOVEA.L LayersBase,A6
  142.     JSR -192(A6)
  143.     MOVEA.L (A7)+,A6
  144.     MOVE.L  D0,@RESULT
  145.   END;
  146. END;
  147.  
  148. FUNCTION CreateBehindLayer(li : pLayer_Info; bm : pBitMap; x0 : LONGINT; y0 : LONGINT; x1 : LONGINT; y1 : LONGINT; flags : LONGINT; bm2 : pBitMap) : pLayer;
  149. BEGIN
  150.   ASM
  151.     MOVE.L  A6,-(A7)
  152.     MOVEA.L li,A0
  153.     MOVEA.L bm,A1
  154.     MOVE.L  x0,D0
  155.     MOVE.L  y0,D1
  156.     MOVE.L  x1,D2
  157.     MOVE.L  y1,D3
  158.     MOVE.L  flags,D4
  159.     MOVEA.L bm2,A2
  160.     MOVEA.L LayersBase,A6
  161.     JSR -042(A6)
  162.     MOVEA.L (A7)+,A6
  163.     MOVE.L  D0,@RESULT
  164.   END;
  165. END;
  166.  
  167. FUNCTION CreateUpfrontHookLayer(li : pLayer_Info; bm : pBitMap; x0 : LONGINT; y0 : LONGINT; x1 : LONGINT; y1 : LONGINT; flags : LONGINT; hook : pHook; bm2 : pBitMap) : pLayer;
  168. BEGIN
  169.   ASM
  170.     MOVE.L  A6,-(A7)
  171.     MOVEA.L li,A0
  172.     MOVEA.L bm,A1
  173.     MOVE.L  x0,D0
  174.     MOVE.L  y0,D1
  175.     MOVE.L  x1,D2
  176.     MOVE.L  y1,D3
  177.     MOVE.L  flags,D4
  178.     MOVEA.L hook,A3
  179.     MOVEA.L bm2,A2
  180.     MOVEA.L LayersBase,A6
  181.     JSR -186(A6)
  182.     MOVEA.L (A7)+,A6
  183.     MOVE.L  D0,@RESULT
  184.   END;
  185. END;
  186.  
  187. FUNCTION CreateUpfrontLayer(li : pLayer_Info; bm : pBitMap; x0 : LONGINT; y0 : LONGINT; x1 : LONGINT; y1 : LONGINT; flags : LONGINT; bm2 : pBitMap) : pLayer;
  188. BEGIN
  189.   ASM
  190.     MOVE.L  A6,-(A7)
  191.     MOVEA.L li,A0
  192.     MOVEA.L bm,A1
  193.     MOVE.L  x0,D0
  194.     MOVE.L  y0,D1
  195.     MOVE.L  x1,D2
  196.     MOVE.L  y1,D3
  197.     MOVE.L  flags,D4
  198.     MOVEA.L bm2,A2
  199.     MOVEA.L LayersBase,A6
  200.     JSR -036(A6)
  201.     MOVEA.L (A7)+,A6
  202.     MOVE.L  D0,@RESULT
  203.   END;
  204. END;
  205.  
  206. FUNCTION DeleteLayer(dummy : LONGINT; layer : pLayer) : LONGINT;
  207. BEGIN
  208.   ASM
  209.     MOVE.L  A6,-(A7)
  210.     MOVEA.L dummy,A0
  211.     MOVEA.L layer,A1
  212.     MOVEA.L LayersBase,A6
  213.     JSR -090(A6)
  214.     MOVEA.L (A7)+,A6
  215.     MOVE.L  D0,@RESULT
  216.   END;
  217. END;
  218.  
  219. PROCEDURE DisposeLayerInfo(li : pLayer_Info);
  220. BEGIN
  221.   ASM
  222.     MOVE.L  A6,-(A7)
  223.     MOVEA.L li,A0
  224.     MOVEA.L LayersBase,A6
  225.     JSR -150(A6)
  226.     MOVEA.L (A7)+,A6
  227.   END;
  228. END;
  229.  
  230. PROCEDURE DoHookClipRects(hook : pHook; rport : pRastPort; rect : pRectangle);
  231. BEGIN
  232.   ASM
  233.     MOVE.L  A6,-(A7)
  234.     MOVEA.L hook,A0
  235.     MOVEA.L rport,A1
  236.     MOVEA.L rect,A2
  237.     MOVEA.L LayersBase,A6
  238.     JSR -216(A6)
  239.     MOVEA.L (A7)+,A6
  240.   END;
  241. END;
  242.  
  243. PROCEDURE EndUpdate(layer : pLayer; flag : ULONG);
  244. BEGIN
  245.   ASM
  246.     MOVE.L  A6,-(A7)
  247.     MOVEA.L layer,A0
  248.     MOVE.L  flag,D0
  249.     MOVEA.L LayersBase,A6
  250.     JSR -084(A6)
  251.     MOVEA.L (A7)+,A6
  252.   END;
  253. END;
  254.  
  255. FUNCTION FattenLayerInfo(li : pLayer_Info) : LONGINT;
  256. BEGIN
  257.   ASM
  258.     MOVE.L  A6,-(A7)
  259.     MOVEA.L li,A0
  260.     MOVEA.L LayersBase,A6
  261.     JSR -156(A6)
  262.     MOVEA.L (A7)+,A6
  263.     MOVE.L  D0,@RESULT
  264.   END;
  265. END;
  266.  
  267. PROCEDURE InitLayers(li : pLayer_Info);
  268. BEGIN
  269.   ASM
  270.     MOVE.L  A6,-(A7)
  271.     MOVEA.L li,A0
  272.     MOVEA.L LayersBase,A6
  273.     JSR -030(A6)
  274.     MOVEA.L (A7)+,A6
  275.   END;
  276. END;
  277.  
  278. FUNCTION InstallClipRegion(layer : pLayer; region : pRegion) : pRegion;
  279. BEGIN
  280.   ASM
  281.     MOVE.L  A6,-(A7)
  282.     MOVEA.L layer,A0
  283.     MOVEA.L region,A1
  284.     MOVEA.L LayersBase,A6
  285.     JSR -174(A6)
  286.     MOVEA.L (A7)+,A6
  287.     MOVE.L  D0,@RESULT
  288.   END;
  289. END;
  290.  
  291. FUNCTION InstallLayerHook(layer : pLayer; hook : pHook) : pHook;
  292. BEGIN
  293.   ASM
  294.     MOVE.L  A6,-(A7)
  295.     MOVEA.L layer,A0
  296.     MOVEA.L hook,A1
  297.     MOVEA.L LayersBase,A6
  298.     JSR -198(A6)
  299.     MOVEA.L (A7)+,A6
  300.     MOVE.L  D0,@RESULT
  301.   END;
  302. END;
  303.  
  304. FUNCTION InstallLayerInfoHook(li : pLayer_Info; hook : pHook) : pHook;
  305. BEGIN
  306.   ASM
  307.     MOVE.L  A6,-(A7)
  308.     MOVEA.L li,A0
  309.     MOVEA.L hook,A1
  310.     MOVEA.L LayersBase,A6
  311.     JSR -204(A6)
  312.     MOVEA.L (A7)+,A6
  313.     MOVE.L  D0,@RESULT
  314.   END;
  315. END;
  316.  
  317. PROCEDURE LockLayer(dummy : LONGINT; layer : pLayer);
  318. BEGIN
  319.   ASM
  320.     MOVE.L  A6,-(A7)
  321.     MOVEA.L dummy,A0
  322.     MOVEA.L layer,A1
  323.     MOVEA.L LayersBase,A6
  324.     JSR -096(A6)
  325.     MOVEA.L (A7)+,A6
  326.   END;
  327. END;
  328.  
  329. PROCEDURE LockLayerInfo(li : pLayer_Info);
  330. BEGIN
  331.   ASM
  332.     MOVE.L  A6,-(A7)
  333.     MOVEA.L li,A0
  334.     MOVEA.L LayersBase,A6
  335.     JSR -120(A6)
  336.     MOVEA.L (A7)+,A6
  337.   END;
  338. END;
  339.  
  340. PROCEDURE LockLayers(li : pLayer_Info);
  341. BEGIN
  342.   ASM
  343.     MOVE.L  A6,-(A7)
  344.     MOVEA.L li,A0
  345.     MOVEA.L LayersBase,A6
  346.     JSR -108(A6)
  347.     MOVEA.L (A7)+,A6
  348.   END;
  349. END;
  350.  
  351. FUNCTION MoveLayer(dummy : LONGINT; layer : pLayer; dx : LONGINT; dy : LONGINT) : LONGINT;
  352. BEGIN
  353.   ASM
  354.     MOVE.L  A6,-(A7)
  355.     MOVEA.L dummy,A0
  356.     MOVEA.L layer,A1
  357.     MOVE.L  dx,D0
  358.     MOVE.L  dy,D1
  359.     MOVEA.L LayersBase,A6
  360.     JSR -060(A6)
  361.     MOVEA.L (A7)+,A6
  362.     MOVE.L  D0,@RESULT
  363.   END;
  364. END;
  365.  
  366. FUNCTION MoveLayerInFrontOf(layer_to_move : pLayer; other_layer : pLayer) : LONGINT;
  367. BEGIN
  368.   ASM
  369.     MOVE.L  A6,-(A7)
  370.     MOVEA.L layer_to_move,A0
  371.     MOVEA.L other_layer,A1
  372.     MOVEA.L LayersBase,A6
  373.     JSR -168(A6)
  374.     MOVEA.L (A7)+,A6
  375.     MOVE.L  D0,@RESULT
  376.   END;
  377. END;
  378.  
  379. FUNCTION MoveSizeLayer(layer : pLayer; dx : LONGINT; dy : LONGINT; dw : LONGINT; dh : LONGINT) : LONGINT;
  380. BEGIN
  381.   ASM
  382.     MOVE.L  A6,-(A7)
  383.     MOVEA.L layer,A0
  384.     MOVE.L  dx,D0
  385.     MOVE.L  dy,D1
  386.     MOVE.L  dw,D2
  387.     MOVE.L  dh,D3
  388.     MOVEA.L LayersBase,A6
  389.     JSR -180(A6)
  390.     MOVEA.L (A7)+,A6
  391.     MOVE.L  D0,@RESULT
  392.   END;
  393. END;
  394.  
  395. FUNCTION NewLayerInfo : pLayer_Info;
  396. BEGIN
  397.   ASM
  398.     MOVE.L  A6,-(A7)
  399.     MOVEA.L LayersBase,A6
  400.     JSR -144(A6)
  401.     MOVEA.L (A7)+,A6
  402.     MOVE.L  D0,@RESULT
  403.   END;
  404. END;
  405.  
  406. PROCEDURE ScrollLayer(dummy : LONGINT; layer : pLayer; dx : LONGINT; dy : LONGINT);
  407. BEGIN
  408.   ASM
  409.     MOVE.L  A6,-(A7)
  410.     MOVEA.L dummy,A0
  411.     MOVEA.L layer,A1
  412.     MOVE.L  dx,D0
  413.     MOVE.L  dy,D1
  414.     MOVEA.L LayersBase,A6
  415.     JSR -072(A6)
  416.     MOVEA.L (A7)+,A6
  417.   END;
  418. END;
  419.  
  420. FUNCTION SizeLayer(dummy : LONGINT; layer : pLayer; dx : LONGINT; dy : LONGINT) : LONGINT;
  421. BEGIN
  422.   ASM
  423.     MOVE.L  A6,-(A7)
  424.     MOVEA.L dummy,A0
  425.     MOVEA.L layer,A1
  426.     MOVE.L  dx,D0
  427.     MOVE.L  dy,D1
  428.     MOVEA.L LayersBase,A6
  429.     JSR -066(A6)
  430.     MOVEA.L (A7)+,A6
  431.     MOVE.L  D0,@RESULT
  432.   END;
  433. END;
  434.  
  435. PROCEDURE SortLayerCR(layer : pLayer; dx : LONGINT; dy : LONGINT);
  436. BEGIN
  437.   ASM
  438.     MOVE.L  A6,-(A7)
  439.     MOVEA.L layer,A0
  440.     MOVE.L  dx,D0
  441.     MOVE.L  dy,D1
  442.     MOVEA.L LayersBase,A6
  443.     JSR -210(A6)
  444.     MOVEA.L (A7)+,A6
  445.   END;
  446. END;
  447.  
  448. PROCEDURE SwapBitsRastPortClipRect(rp : pRastPort; cr : pClipRect);
  449. BEGIN
  450.   ASM
  451.     MOVE.L  A6,-(A7)
  452.     MOVEA.L rp,A0
  453.     MOVEA.L cr,A1
  454.     MOVEA.L LayersBase,A6
  455.     JSR -126(A6)
  456.     MOVEA.L (A7)+,A6
  457.   END;
  458. END;
  459.  
  460. PROCEDURE ThinLayerInfo(li : pLayer_Info);
  461. BEGIN
  462.   ASM
  463.     MOVE.L  A6,-(A7)
  464.     MOVEA.L li,A0
  465.     MOVEA.L LayersBase,A6
  466.     JSR -162(A6)
  467.     MOVEA.L (A7)+,A6
  468.   END;
  469. END;
  470.  
  471. PROCEDURE UnlockLayer(layer : pLayer);
  472. BEGIN
  473.   ASM
  474.     MOVE.L  A6,-(A7)
  475.     MOVEA.L layer,A0
  476.     MOVEA.L LayersBase,A6
  477.     JSR -102(A6)
  478.     MOVEA.L (A7)+,A6
  479.   END;
  480. END;
  481.  
  482. PROCEDURE UnlockLayerInfo(li : pLayer_Info);
  483. BEGIN
  484.   ASM
  485.     MOVE.L  A6,-(A7)
  486.     MOVEA.L li,A0
  487.     MOVEA.L LayersBase,A6
  488.     JSR -138(A6)
  489.     MOVEA.L (A7)+,A6
  490.   END;
  491. END;
  492.  
  493. PROCEDURE UnlockLayers(li : pLayer_Info);
  494. BEGIN
  495.   ASM
  496.     MOVE.L  A6,-(A7)
  497.     MOVEA.L li,A0
  498.     MOVEA.L LayersBase,A6
  499.     JSR -114(A6)
  500.     MOVEA.L (A7)+,A6
  501.   END;
  502. END;
  503.  
  504. FUNCTION UpfrontLayer(dummy : LONGINT; layer : pLayer) : LONGINT;
  505. BEGIN
  506.   ASM
  507.     MOVE.L  A6,-(A7)
  508.     MOVEA.L dummy,A0
  509.     MOVEA.L layer,A1
  510.     MOVEA.L LayersBase,A6
  511.     JSR -048(A6)
  512.     MOVEA.L (A7)+,A6
  513.     MOVE.L  D0,@RESULT
  514.   END;
  515. END;
  516.  
  517. FUNCTION WhichLayer(li : pLayer_Info; x : LONGINT; y : LONGINT) : pLayer;
  518. BEGIN
  519.   ASM
  520.     MOVE.L  A6,-(A7)
  521.     MOVEA.L li,A0
  522.     MOVE.L  x,D0
  523.     MOVE.L  y,D1
  524.     MOVEA.L LayersBase,A6
  525.     JSR -132(A6)
  526.     MOVEA.L (A7)+,A6
  527.     MOVE.L  D0,@RESULT
  528.   END;
  529. END;
  530.  
  531. END. (* UNIT LAYERS *)
  532.